/**
 * Word公用方法
 *  
 * @author 董一华 2010-09-14
 * 
 */
package com.zjht.gmcc.bean.file;

public class Word {
	public static final short ROW_HEIGHT = 449;// 行高

	public enum BorderStatus {
		SHOW, // 显示
		HIDE, // 隐藏
		NONE
		// 无
	};

	public enum Border {
		top, left, bottom, right
	};

	public enum Merge {
		FIRST, MERGE, NONE
	};

	/**
	 * 获取word表格开始代码
	 * @author dyh 2010-9-15
	 * @param height 行高
	 * @return
	 */
	public static String getTableBegin(int cellwidth[]) {
		if (cellwidth.length == 0)
			return "";
		int widthtotal = 0;
		StringBuilder col = new StringBuilder();
		for (int i = 0; i < cellwidth.length; i++) {
			widthtotal += cellwidth[i];
			col.append("<w:gridCol w:w=\"");
			col.append(cellwidth[i]);
			col.append("\" />");
		}
		if (widthtotal == 0)
			return "";
		StringBuilder table = new StringBuilder();
		table.append("<w:tbl>");
		table.append("<w:tblPr>");
		table.append("<w:tblW w:w=\"");
		table.append(widthtotal);
		table.append("\" w:type=\"pct\" />");
		table.append("</w:tblPr>");
		table.append("<w:tblGrid>");
		table.append(col);
		table.append("</w:tblGrid>");
		return table.toString();
	}

	/**
	 * 获取word表格结束代码
	 * @author dyh 2010-9-15
	 * @return
	 */
	public static String getTableEnd() {
		return "</w:tbl>";
	}

	/**
	 * 获取word行开始代码
	 * @author dyh 2010-9-15
	 * @param height 行高
	 * @return
	 */
	public static String getRowBegin(int height) {
		StringBuilder row = new StringBuilder();
		row.append("<w:tr wsp:rsidR=\"004816F9\" wsp:rsidRPr=\"004816F9\" wsp:rsidTr=\"00C37DC8\">");
		row.append("<w:trPr>");
		row.append("<w:trHeight w:val=\"");
		row.append(height);
		row.append("\" />");
		row.append("</w:trPr>");
		return row.toString();
	}

	/**
	 * 获取word行开始代码
	 * @author dyh 2010-9-15
	 * @param height 行高
	 * @return
	 */
	public static String getRowBegin() {
		StringBuilder row = new StringBuilder();
		row.append("<w:tr wsp:rsidR=\"004816F9\" wsp:rsidRPr=\"004816F9\" wsp:rsidTr=\"00C37DC8\">");
		row.append("<w:trPr>");
		row.append("<w:trHeight w:val=\"");
		row.append(ROW_HEIGHT);
		row.append("\" />");
		row.append("</w:trPr>");
		return row.toString();
	}

	/**
	 * 获取word行结束代码
	 * @author dyh 2010-9-15
	 * @return
	 */
	public static String getRowEnd() {
		return "</w:tr>";
	}

	/**
	 * 获取word空单元格(不输出内容，用于被合并的单元格)
	 * @author dyh 2010-9-16
	 * @param width 单元格宽度
	 * @param content 单元格内容(如果为null，则不输出内容)
	 * @return
	 */
	public static String getHeaderCell(int width, String content) {
		return getCell(width, content, true, Merge.NONE, BorderStatus.SHOW, BorderStatus.SHOW, BorderStatus.SHOW, BorderStatus.SHOW);
	}

	/**
	 * 获取word空单元格(不输出内容，用于被合并的单元格)
	 * @author dyh 2010-9-16
	 * @param width 单元格宽度
	 * @param top 边框样式
	 * @param left 边框样式
	 * @param bottom 边框样式 
	 * @param right 边框样式
	 * @return
	 */
	public static String getNullCell(int width, BorderStatus top, BorderStatus left, BorderStatus bottom, BorderStatus right) {
		return getCell(width, null, false, Merge.MERGE, top, left, bottom, right);
	}

	/**
	 * 获取word单元格
	 * @author dyh 2010-9-16
	 * @param width 单元格宽度
	 * @param content 单元格内容(如果为null，则不输出内容)
	 * @param isBold 字体是否加粗
	 * @param merge 是否则合并
	 * @param top 边框样式
	 * @param left 边框样式
	 * @param bottom 边框样式 
	 * @param right 边框样式
	 * @return
	 */
	public static String getCell(int width, String content, boolean isBold, Merge merge, BorderStatus top, BorderStatus left, BorderStatus bottom,
			BorderStatus right) {
		StringBuilder cell = new StringBuilder();// 单元格内容模板
		cell.append("<w:tc>");
		cell.append("<w:tcPr>");
		cell.append("<w:tcW w:w=\"");
		cell.append(width);
		cell.append("\" w:type=\"pct\" />");
		switch (merge) {
			case FIRST:
				cell.append("<w:vmerge w:val=\"restart\" />");
				break;
			case MERGE:
				cell.append("<w:vmerge />");
				break;
			case NONE:
				break;
		}
		cell.append("<w:tcBorders>");
		cell.append(getBorder(Border.top, top));
		cell.append(getBorder(Border.left, left));
		cell.append(getBorder(Border.bottom, bottom));
		cell.append(getBorder(Border.right, right));

		cell.append("</w:tcBorders>");
		cell.append("<w:shd w:val=\"clear\" w:color=\"auto\" w:fill=\"auto\" />");
		cell.append("<w:vAlign w:val=\"center\" />");
		cell.append("</w:tcPr>");
		cell.append("<w:p wsp:rsidR=\"004816F9\" wsp:rsidRPr=\"004816F9\" wsp:rsidRDefault=\"004816F9\" wsp:rsidP=\"004816F9\">");
		cell.append("<w:pPr>");
		cell.append("<w:widowControl />");
		cell.append("<w:jc w:val=\"center\" />");
		cell.append("<w:rPr>");
		cell.append("<w:rFonts w:ascii=\"仿宋_GB2312\" w:fareast=\"仿宋_GB2312\" w:h-ansi=\"Arial\" w:cs=\"Arial\" w:hint=\"fareast\" />");
		cell.append("<wx:font wx:val=\"仿宋_GB2312\" />");
		if (isBold) {
			cell.append("<w:b />");
			cell.append("<w:b-cs />");
		}
		cell.append("<w:kern w:val=\"0\" />");
		cell.append("<w:sz w:val=\"24\" />");
		cell.append("</w:rPr>");
		cell.append("</w:pPr>");
		if (content != null) {
			cell.append("<w:r wsp:rsidRPr=\"004816F9\">");
			cell.append("<w:rPr>");
			cell.append("<w:rFonts w:ascii=\"仿宋_GB2312\" w:fareast=\"仿宋_GB2312\" w:h-ansi=\"Arial\" w:cs=\"Arial\" w:hint=\"fareast\" />");
			cell.append("<wx:font wx:val=\"仿宋_GB2312\" />");
			if (isBold) {
				cell.append("<w:b />");
				cell.append("<w:b-cs />");
			}
			cell.append("<w:kern w:val=\"0\" />");
			cell.append("<w:sz w:val=\"24\" />");
			cell.append("</w:rPr>");
			cell.append("<w:t>");
			cell.append(content);
			cell.append("</w:t>");
			cell.append("</w:r>");
		}
		cell.append("</w:p>");
		cell.append("</w:tc>");
		return cell.toString();
	}

	/**
	 * 获取word表格边框
	 * @author dyh 2010-9-15
	 * @param border 边框位置
	 * @param borderstatus 边框显示样式
	 * @return
	 */
	public static String getBorder(Border border, BorderStatus borderstatus) {
		String str = "";
		String strBorder = border.toString();
		switch (borderstatus) {
			case SHOW:
				str = "<w:" + strBorder + " w:val=\"single\" w:sz=\"4\" wx:bdrwidth=\"10\" w:space=\"0\" w:color=\"000000\" />";
				break;
			case HIDE:
				str = "<w:" + strBorder + " w:val=\"nil\" />";
				break;
			case NONE:
				break;
		}
		return str;
	}
}